<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.6" />
<title>Release notes for Gerrit 2.1.7</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

pre {
  padding: 0;
  margin: 0;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }


/*
 * xhtml11 specific
 *
 * */

tt {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

.monospaced {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}
</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>Release notes for Gerrit 2.1.7</h1>
<span id="revnumber">version 2.1.7 (from v2.7-rc2-530-g4d7ac77)</span>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>Gerrit 2.1.7 is now available:</p></div>
<div class="paragraph"><p><a href="http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.1.7.war">http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.1.7.war</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_schema_change">Schema Change</h2>
<div class="sectionbody">
<div class="paragraph"><p><strong>WARNING</strong> This release contains multiple schema changes.  To upgrade:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war init -d site_path</tt></pre>
</div></div>
<div class="paragraph"><p>To export prior review information into <tt>refs/notes/review</tt> branches
within each Git repository:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war ExportReviewNotes -d site_path</tt></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_memory_usage_increase">Memory Usage Increase</h2>
<div class="sectionbody">
<div class="paragraph"><p><strong>WARNING</strong> The JGit delta base cache, whose size is controlled by
<tt>core.deltaBaseCacheLimit</tt>, has changed in this release from being a
JVM-wide singleton to per-thread. This alters the memory usage, going
from 10M for the entire JVM to 10M per concurrent operation. The
change improves performance on big repositories, but may need a larger
<tt>container.heapLimit</tt> if the number of concurrent operations is high.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_new_features">New Features</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_change_data">Change Data</h3>
<div class="ulist"><ul>
<li>
<p>
issue 64 Create Git notes for submitted changes
</p>
<div class="paragraph"><p>Git notes are automatically added to the <tt>refs/notes/review</tt>.</p></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_query">Query</h3>
<div class="ulist"><ul>
<li>
<p>
Search project names by substring
</p>
<div class="paragraph"><p>Entering a word with no operator (for example <tt>gerrit</tt>) will be
expanded to all projects whose names contain the string <em>gerrit</em>.</p></div>
</li>
<li>
<p>
issue 722 ownerin and reviewerin search predicates
</p>
<div class="paragraph"><p>New search predicates <tt>ownerin:'GROUP'</tt> and <tt>reviewerin:'GROUP'</tt>
search for changes whose owner or that has a reviewer in (or not
in if prefixed with <tt>-</tt>) the specified group.</p></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_web_ui">Web UI</h3>
<div class="ulist"><ul>
<li>
<p>
Add reviewer/verifier name beside check/plus/minus
</p>
<div class="paragraph"><p>Change lists (such as from a search result, or in a user&#8217;s dashboard)
can now optionally display the name of the reviewer or verifier who
gave the score being shown in the summary column. This is an optional
per-user preference that can be enabled in the Settings screen.</p></div>
</li>
<li>
<p>
Add a "revert change"-button to a submitted patchset
</p>
<div class="paragraph"><p>Clicking "Revert Change" creates a new change with the inverse of
the submitted patch set ready for review and submission. This makes
it easy to undo a build-breaking change right from the web UI.</p></div>
</li>
<li>
<p>
issue 194 Diff patch sets
</p>
<div class="paragraph"><p>Change pages now offer a selection box, "Old Version History",
to compare patch sets against one another and view only the files
that differ between two patch sets. This new feature can speed up
re-reviewing a change.</p></div>
</li>
<li>
<p>
issue 913 Support different color palette when not signed in
</p>
<div class="paragraph"><p>Site administrators can configure a different theme in gerrit.config for
the signed-in and signed-out states, making it more obvious to site users
they are currently signed-in (or not).</p></div>
</li>
<li>
<p>
Add parent info to each change screen Patch Set
</p>
<div class="paragraph"><p>This mirrors the data shown in the <em>Commit Message</em> file, making
it easy to identify the parent(s) of the commit without opening
up the Commit Message or gitweb.</p></div>
</li>
<li>
<p>
Remove the SSH key loading applet
</p>
<div class="paragraph"><p>The Java based SSH key loading applet is no longer included as part of
the Gerrit Code Review interface. Users need to copy and paste their
SSH public key files by hand.</p></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_ssh_commands">SSH Commands</h3>
<div class="ulist"><ul>
<li>
<p>
issue 674 Add abandon/restore to <tt>gerrit review</tt>
</p>
</li>
<li>
<p>
Add <tt>gerrit version</tt> command
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_change_upload">Change Upload</h3>
<div class="ulist"><ul>
<li>
<p>
Display a more verbose "you are not author/committer" message
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_documentation">Documentation</h3>
<div class="ulist"><ul>
<li>
<p>
Detailed error message explanations
</p>
<div class="paragraph"><p>Most common error messages are now described in detail in the
documentation under <em>User Guide</em>, <em>Error Messages</em>.  Each error is
explained, along with possible courses of action for an end-user to
resolve the issue.</p></div>
</li>
<li>
<p>
issue 905 Document reverse proxy using Nginx
</p>
</li>
<li>
<p>
Updated system scaling data in <em>System Design</em>
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_outgoing_mail">Outgoing Mail</h3>
<div class="ulist"><ul>
<li>
<p>
Optionally add Importance and Expiry-Days headers
</p>
<div class="paragraph"><p>New gerrit.config variable <tt>sendemail.importance</tt> can be set to <tt>high</tt>
or <tt>low</tt> to classify outgoing mail, and <tt>sendemail.expiryDays</tt> can be
set to suggest clients should automatically expire or expunge messages
this many days after being sent.</p></div>
</li>
<li>
<p>
Add support for SMTP AUTH LOGIN
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_administration">Administration</h3>
<div class="ulist"><ul>
<li>
<p>
Group option to make group visible to all users
</p>
<div class="paragraph"><p>A new group option permits the group to be visible to all users,
rather than just its members. Some sites may find this useful for
a project owners group, to help users contact the relevant folks.</p></div>
</li>
<li>
<p>
Group option to only email change authors on updates
</p>
<div class="paragraph"><p>A new group option causes all users who are a member of that group to
only send email notifications to change authors, excluding reviewers
and watchers. This can be useful for automated build and testing users
to reduce the amount of email sent to reviewers.</p></div>
</li>
<li>
<p>
Hide non-visible groups from suggestion service
</p>
<div class="paragraph"><p>Groups that are not visible to a user are not shown as suggestions in
contexts where a group name completion is supported.  The previously
mentioned <em>make group visible to all users</em> flag can be used on a
per-group basis to expose groups to everyone.</p></div>
</li>
<li>
<p>
Use suggest.accounts to control user completion suggestions
</p>
<div class="paragraph"><p>The new <tt>suggest.accounts</tt> configuration variable in gerrit.config
can control how suggestions for users are offered.</p></div>
</li>
<li>
<p>
Permit groups to be members of other groups
</p>
<div class="paragraph"><p>Groups can now be a member of another group, users are automatically
a member of the transitive closure of their group membership.</p></div>
</li>
<li>
<p>
READ +3 permission required to upload merges
</p>
<div class="paragraph"><p>The new READ +3 permission is required to upload merge commits. Users
with only READ +2 permission may upload new changes, but not merges.
The schema upgrade will automatically convert any current READ +2
access lines to be READ +3 to maintain prior behavior.</p></div>
</li>
<li>
<p>
"Show Inherited Rights" checkbox in Project Access
</p>
<div class="paragraph"><p>This checkbox enables showing or hiding the lines that are inherited
from the parent project. This makes it easier to find the rules that
are unique to the project being viewed.</p></div>
</li>
<li>
<p>
Allow single letter usernames
</p>
<div class="paragraph"><p>Username requirements are relaxed to permit single letter usernames.</p></div>
</li>
<li>
<p>
Fine-grained control over authentication cookie
</p>
<div class="paragraph"><p>Site administrators can now set <tt>auth.cookieSecure</tt> to request
browsers only send the cookie over https:// connections, preventing
eavesdropping.</p></div>
<div class="paragraph"><p>Site administrators can now set <tt>auth.cookiePath</tt> to override the
path used for the authentication cookie, which may be necessary if
a reverse proxy maps requests to the managed gitweb.</p></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_replication">Replication</h3>
<div class="ulist"><ul>
<li>
<p>
Add adminUrl to replication for repository creation
</p>
<div class="paragraph"><p>Replication remotes can be configured with <tt>remote.name.adminUrl</tt> to
indicate an SSH path for repository creation that is different from
the normal push URL in <tt>remote.name.url</tt>. The adminUrl can be used by
Gerrit to create a new repository when the normal URL is a non-SSH
URL, such as git:// or http://.</p></div>
</li>
<li>
<p>
Support HTTP authentication for replication
</p>
<div class="paragraph"><p>Replication can now be performed over an authenticated smart HTTP
transport, in addition to anonymous Git and authenticated SSH.</p></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_misc">Misc.</h3>
<div class="ulist"><ul>
<li>
<p>
Alternative URL for Gerrit&#8217;s managed Gitweb
</p>
<div class="paragraph"><p>The internal gitweb served from <tt>/gitweb</tt> can now appear to be from a
different URL by using a reverse proxy that does URL rewriting.</p></div>
</li>
<li>
<p>
Internal dependencies updated
</p>
<div class="paragraph"><p>Updated H2 Database to 1.2.147, PostgreSQL JDBC Client to 9.0-801,
openid4java to 0.9.6, ANTLR to 3.2, GWT to 2.1.1, JSch to 0.1.44, Gson
to 1.6, Apache Commons Net to 2.2, Apache Commons Pool to 1.5.5, JGit
to 0.12.1.53-g5ec4977, MINA SSHD to 0.5.1-r1095809.</p></div>
</li>
</ul></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_bug_fixes">Bug Fixes</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_web_ui_2">Web UI</h3>
<div class="ulist"><ul>
<li>
<p>
issue 853 Incorrect side-by-side display of modified lines
</p>
<div class="paragraph"><p>A bug in JGit lead to the side-by-side view displaying wrong and
confusing output of modified lines. This bug also caused some
automatic merges to be carried out incorrectly, usually resulting in
compile failures. Fixed.</p></div>
</li>
<li>
<p>
Disallow negative/zero columns in difference views
</p>
<div class="paragraph"><p>Previously a negative or zero value in the number of columns field
would break the user&#8217;s account and prevent them from viewing any file
differences through the web UI. Values less than 1 are now rejected,
and existing broken accounts will work again by resetting to a sane
column count.</p></div>
</li>
<li>
<p>
Fix branches table displaying symbolic references (e.g. HEAD).
</p>
<div class="paragraph"><p>In the project&#8217;s "Branches" tab symbolic references like HEAD always
displayed the wrong target name. Fixed to display the target name of
the reference.</p></div>
</li>
<li>
<p>
Disallow deletion of HEAD and targets of symbolic refs
</p>
<div class="paragraph"><p>Deleting the target of a symbolic reference causes the symbolic to
become dangling, and it becomes useless.</p></div>
</li>
<li>
<p>
Prevent creating <em>refs/for/branch</em> in web UI.
</p>
</li>
<li>
<p>
issue 804 Display proper error message on invalid group
</p>
<div class="paragraph"><p>Attempting to browse a group that does not exist or that is not
visible to the current user now displays a proper error message,
instead of a scary generic "Application Error, Server Error".</p></div>
</li>
<li>
<p>
issue 822 Up To Change link activates last browsed patch set
</p>
</li>
<li>
<p>
issue 846 Disable buttons during RPCs
</p>
</li>
<li>
<p>
issue 915 Always display button text in black
</p>
</li>
<li>
<p>
issue 946 Make sure that ENTER works in all text fields
</p>
</li>
<li>
<p>
issue 963 Go back to change screen if <em>Publish and Submit</em> fails
</p>
</li>
<li>
<p>
Enable "Sign Out" when auth.type = CLIENT_SSL_CERT_LDAP.
</p>
</li>
<li>
<p>
Fix handling of "Session Expired" with SSL certificates.
</p>
</li>
<li>
<p>
Fix compatibility with recent releases of Gitweb.
</p>
</li>
<li>
<p>
Fix "review" link in Gitweb integration.
</p>
</li>
<li>
<p>
Always display button text in black
</p>
</li>
<li>
<p>
Always disable content merge option if user can&#8217;t change project
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_commit_msg_hook">commit-msg Hook</h3>
<div class="ulist"><ul>
<li>
<p>
issue 922 Fix commit-msg hook to run on Solaris
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_outgoing_mail_2">Outgoing Mail</h3>
<div class="ulist"><ul>
<li>
<p>
issue 780 E-mail about failed merge should not use Anonymous Coward
</p>
<div class="paragraph"><p>Some email was sent as Anonymous Coward, even when the user had a
configured name and email address. Fixed.</p></div>
</li>
<li>
<p>
Fix calculation of project owners
</p>
<div class="paragraph"><p>When sending out new changes for review, Gerrit automatically
tries to address the project owners on the To line of the outgoing
message. This sometimes included the owner of a branch. Fixed.</p></div>
</li>
<li>
<p>
Do not email reviewers adding themselves as reviewers
</p>
</li>
<li>
<p>
Fix comma/space separation in email templates
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_pushing_changes">Pushing Changes</h3>
<div class="ulist"><ul>
<li>
<p>
Avoid huge pushes during refs/for/BRANCH push
</p>
<div class="paragraph"><p>With Gerrit 2.1.6, clients started to push possibly hundreds of
megabytes for what should be a tiny patch set changing 1 line of 1
file. This large push was caused by the server advancing ahead of the
client (e.g. due to another change being submitted) and the client not
having fetched the new version. Fixed by adding some recent history to
the advertisement so that clients don&#8217;t have to upload the entire
project for a small change.</p></div>
</li>
<li>
<p>
issue 414 Reject pushing multiple commits with same Change-Id
</p>
<div class="paragraph"><p>If multiple new commits are uploaded to a refs/for/ branch and
they have the same Change-Id, the push is now rejected.  Within
a project, the Change-Id should be unique and users should either
squash the commits, or modify them to use unique Change-Ids.</p></div>
</li>
<li>
<p>
issue 635 Match Change-Id by project and branch combination
</p>
</li>
<li>
<p>
issue 635 Auto close changes by Change-Id on same branch only
</p>
<div class="paragraph"><p>Changes are automatically closed during direct push to branch only if
the Change-Id line matches and the branch name matches. Previously
changes were closed automatically if only the Change-Id matched,
making it difficult to cherry-pick changes across branches.</p></div>
</li>
<li>
<p>
issue 947 Disallow to push to non-connected target
</p>
<div class="paragraph"><p>If a repository stores disconnected history graphs on different
branches, changes may only be pushed to the correct branch.</p></div>
</li>
<li>
<p>
Always do Change-Id checks on receiving commits
</p>
<div class="paragraph"><p>Ensure Change-Ids aren&#8217;t incorrectly used, even if the project does
not require them to be present.  Previously some validity checks were
only performed if the project required Change-Id lines.</p></div>
</li>
<li>
<p>
Make Change-Id requirement applicable only to reviews
</p>
<div class="paragraph"><p>Change-Ids are not required when directly pushing to a branch. This
permits projects that normally require Change-Ids to still perform
direct branch pushes for updates received from an upstream project
that does not use Change-Ids.</p></div>
</li>
<li>
<p>
Reject invalid Change-Id lines
</p>
<div class="paragraph"><p>Severely malformed Change-Id lines were previously accepted by the
server. These are now rejected.</p></div>
</li>
<li>
<p>
Fix error message returned on push to closed change
</p>
<div class="paragraph"><p>If a commit with a Change-Id was pushed, and the corresponding change
was already closed, the server incorrectly errored out with "No new
changes". Now it reports the change is closed and does not accept a
new patch set.</p></div>
</li>
<li>
<p>
Fix error message for rejecting a change of another project
</p>
<div class="paragraph"><p>Instead of saying <em>change not found</em> when pushing to a commit to
a refs/changes/NNNN reference that belongs in another project, the
error now indicates the change belongs to another project.</p></div>
</li>
<li>
<p>
Better help message when commit message is malformed
</p>
<div class="paragraph"><p>If the commit message is badly formatted Gerrit displays an error
message to the client. This message has been extended to offer
suggestions on how to correct the commit message.</p></div>
</li>
<li>
<p>
Log warning on <em>change state corrupt</em> error
</p>
<div class="paragraph"><p>If a change state corrupt error is reported to a client, there was
no mention if it on the server error log. Now it is reported so the
site administrator also knows about it.</p></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_ssh_commands_2">SSH Commands</h3>
<div class="ulist"><ul>
<li>
<p>
issue 755 Send new patchset event after its available
</p>
</li>
<li>
<p>
issue 814 Evict initial members of group created by SSH
</p>
</li>
<li>
<p>
issue 879 Fix replication of initial empty commit in new project
</p>
</li>
<li>
<p>
Disallow setting a project as parent for itself
</p>
</li>
<li>
<p>
Automatically create user account(s) as necessary
</p>
</li>
<li>
<p>
Move SSH command creation off NioProcessor threads
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_administration_2">Administration</h3>
<div class="ulist"><ul>
<li>
<p>
Enable git reflog for all newly created projects
</p>
<div class="paragraph"><p>Previously branch updates were not being recorded in the native Git
reflogs ($GIT_DIR/logs/refs/heads) due to a misconfiguration on new
projects created by gerrit create-project. Fixed.</p></div>
</li>
<li>
<p>
Fix IllegalArgumentException caused by non-ASCII user names
</p>
<div class="paragraph"><p>An invalid username is now always reported in UTF-8.</p></div>
</li>
<li>
<p>
PostgreSQL: conditional installation of PL/pgSQL.
</p>
<div class="paragraph"><p>Conditional installation is needed to install Gerrit on PostgreSQL 9.</p></div>
</li>
<li>
<p>
issue 961 Fix NPE on Gerrit startup if mail.from is invalid
</p>
</li>
<li>
<p>
issue 966 Enable git:// download URLs if canonicalGitUrl set
</p>
</li>
<li>
<p>
Stop logging <em>keepalive@jcraft.com</em> errors in error_log
</p>
</li>
<li>
<p>
gerrit.sh: Fix issues on SuSE Linux
</p>
</li>
<li>
<p>
gerrit.sh: Fix issues on Solaris
</p>
</li>
<li>
<p>
gerrit.sh: Support spaces in JAVA_HOME
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_documentation_2">Documentation</h3>
<div class="ulist"><ul>
<li>
<p>
issue 800 documentation: Show example of review -m
</p>
</li>
<li>
<p>
issue 896 Clarify that ${name} is required for replication.
</p>
</li>
<li>
<p>
Fix spelling mistake in <em>Searching Changes</em> documentation
</p>
</li>
<li>
<p>
Fix spelling mistake in user-upload documentation
</p>
</li>
<li>
<p>
Document cache diff_intraline
</p>
</li>
<li>
<p>
Document change set dependencies and cherry-pick
</p>
</li>
<li>
<p>
Include user in scp commands to copy commit hook
</p>
</li>
<li>
<p>
Adjust documentation to build with current AsciiDoc version
</p>
</li>
</ul></div>
</div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Version 2.1.7 (from v2.7-rc2-530-g4d7ac77)<br />
Last updated 2013-10-08 10:02:12 PDT
</div>
</div>
</body>
</html>
